package ManagedBeans;

import ComponenteDatos.DepartamentoFacadeLocal;
import ComponenteEntidad.Departamento;
import ComponenteEntidad.Pais;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

@ManagedBean
@SessionScoped
public class ManagedBeanDepartamento implements  Serializable{

    @EJB
    private DepartamentoFacadeLocal DepartamentoFacade;
    private Departamento objetoDepartamento;
    private Departamento objetoDepartamentoCrear;
    private Pais objetoPais;
    private List<Departamento> lista;
    private List<SelectItem> objetoItems = new LinkedList<SelectItem>();
    private List<SelectItem> objetoItems2 = new LinkedList<SelectItem>();
    private HashMap<Integer, Departamento> myobjeto = new HashMap<Integer, Departamento>();

    public ManagedBeanDepartamento() {
        objetoDepartamento = new Departamento();
        objetoDepartamento.setIdDepartamento(1);
        objetoPais = new Pais();
        lista = new LinkedList<Departamento>();
        objetoDepartamentoCrear = new Departamento();
        objetoDepartamentoCrear.setDepDepartamento("");
        objetoDepartamentoCrear.setDepDescripcion("");
        objetoDepartamentoCrear.setDepEstado(true);
    }

    public List<SelectItem> getObjetoItems() {
        lista = new ArrayList<Departamento>();
        objetoItems = new LinkedList<SelectItem>();
        lista = DepartamentoFacade.findAll();
        for (Departamento p : lista) {
            if (p.getDepEstado() == true) {
                myobjeto.put(p.getIdDepartamento(), p);
                objetoItems.add(new SelectItem(p, p.getDepDepartamento()));
            }
        }
        return objetoItems;
    }

    public void setObjetoItems(List<SelectItem> objetoItems) {
        this.objetoItems = objetoItems;
    }

    public Pais getObjetoPais() {
        return objetoPais;
    }

    public void setObjetoPais(Pais objetoPais) {
        this.objetoPais = objetoPais;
    }

    public Departamento getObjetoDepartamento() {
        return objetoDepartamento;
    }

    public Departamento getObjetoDepartamento(int id) {
        return (Departamento) myobjeto.get(id);
    }

    public void setObjetoDepartamento(Departamento objetoDepartamento) {
        this.objetoDepartamento = objetoDepartamento;
    }

    public Departamento getObjetoDepartamentoCrear() {
        return objetoDepartamentoCrear;
    }

    public void setObjetoDepartamentoCrear(Departamento objetoDepartamentoCrear) {
        this.objetoDepartamentoCrear = objetoDepartamentoCrear;
    }

    public List<SelectItem> getObjetoItems2() {
        return objetoItems2;
    }

    public void setObjetoItems2(List<SelectItem> objetoItems2) {
        this.objetoItems2 = objetoItems2;
    }

    public List<Departamento> getLista() {
        lista = new LinkedList<Departamento>();
        List<Departamento> listaTemporal = new LinkedList<Departamento>();
        listaTemporal = DepartamentoFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getDepEstado() == true) {
                lista.add(listaTemporal.get(i));
            }
        }
        return lista;
    }

    public void setLista(List<Departamento> lista) {
        this.lista = lista;
    }

    public HashMap<Integer, Departamento> getMyobjeto() {
        return myobjeto;
    }

    public void setMyobjeto(HashMap<Integer, Departamento> myobjeto) {
        this.myobjeto = myobjeto;
    }

    public void insertar() {
        try {
            if (!verificarSiexiste(objetoDepartamentoCrear.getDepDepartamento())) {
                objetoDepartamentoCrear.setDepEstado(true);
                objetoDepartamentoCrear.setPais(objetoPais);
                DepartamentoFacade.create(objetoDepartamentoCrear);
                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoDepartamentoCrear = new Departamento();
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Departamento");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void editar() {
        try {
            DepartamentoFacade.edit(objetoDepartamento);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void eliminar() {
        try {
            objetoDepartamento.setDepEstado(false);
            DepartamentoFacade.edit(objetoDepartamento);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Departamento Seleccionado", ((Departamento) event.getObject()).getIdDepartamento().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselect(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("Departamento No seleccionado", ((Departamento) event.getObject()).getIdDepartamento().toString());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public boolean verificarSiexiste(String desc) {
        boolean existe = false;
        lista = new LinkedList<Departamento>();
        List<Departamento> listaTemporal = new LinkedList<Departamento>();
        listaTemporal = DepartamentoFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getDepDepartamento().equalsIgnoreCase(desc) && listaTemporal.get(i).getDepEstado() == true) {
                existe = true;
            }
        }

        return existe;
    }

    public void cargarDepxPais() {
        lista = new ArrayList<Departamento>();
        objetoItems2 = new LinkedList<SelectItem>();
        lista = DepartamentoFacade.findAll();
        for (Departamento p : lista) {
            if (p.getPais().getIdPais() == objetoDepartamento.getPais().getIdPais()) {
                myobjeto.put(p.getIdDepartamento(), p);
                objetoItems2.add(new SelectItem(p, p.getDepDepartamento()));
                // System.out.println("en el if");
            }
        }
    }
}
